Cloud Workflowsでランタイム引数のデフォルト値を設定する
はじめに
データアナリティクス事業本部のkobayashiです。
GoogleCloudのWorkflowsを引数を与えて実行するような場面はよくあるかと思いますが、その際に引数を与えなかった場合のデフォルト値の与え方を調べて見たのでまとめます。
Workflowsを実行する際のランタイム引数
Workflowsを実行する際に以下のようなリクエストでランタイム引数を与えることでWorkflows内でその値を使用することができます。
gcloud workflows run ワークフロー名 --location asia-northeast1 --data='{"title":"hogehoge","date":"2022-07-07"}'
設定した引数をWorkflows内で使用するには以下のようにparamsフィールドで引数を受け取り、args.引数名
でWorkflows中で使用します。
main: params: [ args ] steps: - assign_value: assign: - title: args.title - date: args.date - logging: call: sys.log args: text: ${"title:" + title + ", date:" + date } severity: INFO
ランタイム引数でデフォルト値を設定する
ランタイム引数は上記のようにWorkflowsを実行する際の--data
フラグで与えますが--data
で引数を与えなかった場合にデフォルト値を使いたい場面もあるかと思います。例えば、上記の例で言えば引数でdate
を与えなければ実行日を使う場面が想定されます。
その際にはWorkflowsの組み込み関数であるdefault(val, defaultVal)
とmap.get(map, keys)
を使用します。
この2つの関数を組み合わせるとmapに該当キーがない場合はdefaultValを取得できるのでこれを使ってランタイム引数がない場合のデフォルト値を設定することができます。
では以下のようなランタイム引数がないWorkflowsのリクエストを行った際にデフォルト値を設定するWorkflowsのyamlを記述してみます。
gcloud workflows run ワークフロー名 --location asia-northeast1 --data='{}'
title
にはデフォルト値でfugafuga
をdate
には実行日を設定しています。
main: params: [ args ] steps: - assign_value: assign: - title: ${default( map.get(args,"title"), "fugafuga")} - now: ${time.format(sys.now(), "Asia/Tokyo")} - today: ${text.split(time.format(sys.now(), "Asia/Tokyo"), "T")[0]} - date: ${default( map.get(args,"title"), today)} - logging: call: sys.log args: text: ${"title:" + title + ", date:" + date } severity: INFO
title
の変数は単純にdefault( map.get(args,キー名), デフォルト値)
の形式で記述していますが、date
に関してはこちらも組み込み関数のsys.now()
をJSTで取得した値が2022-07-07T06:53:18.335196+09:00
の形式なので更にtext.split(source,separator)
で日付部分のみを抽出しています。
以上が引数無しでWorkflowsを実行した際のデフォルト値の設定方法となります。
まとめ
GoogleCloudのWorkflowsを実行する場合の引数を与えなかった場合のデフォルト値の与え方をまとめました。Workflowsを柔軟に使う際にはよく使うテクニックだと思います。自分が作成するWorkflowsでも大体実装していますので是非使ってみてください。
最後まで読んで頂いてありがとうございました。